package org.wheel.plugins.starter.autoconfigure;

import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.log.Log;
import cn.hutool.log.LogFactory;
import jakarta.annotation.PostConstruct;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.wheel.plugins.toolkit.jdbc.pool.bean.DatabaseConnection;
import org.wheel.plugins.toolkit.jdbc.pool.util.DynamicJdbcPoolUtil;

import java.util.Map;

@Getter
@Setter
//@Configuration
@ConfigurationProperties(prefix = "spring.datasource")
public class DynamicDataSourceProperties extends DatabaseConnection{

    // 直接使用 LogFactory 创建日志对象，Hutool 会自动检测项目中的日志框架（优先级：Slf4j > Log4j > Logback > JDK Logging）
    private static final Log log = LogFactory.get();

    @Getter
    private final String defaultName = "primary";
    /**
     * 数据源
     */
    private Map<String, DatabaseConnection> multiDatasource;


    @PostConstruct
    public void init() {
        // 自定义初始化逻辑
        log.trace("初始化 DynamicDataSourceProperties");
//        DynamicJdbcPoolUtil util = DynamicJdbcPoolUtil.getInstance();
        // 主数据源
        if (StrUtil.isNotBlank(this.getUrl())) {
            String name = StrUtil.blankToDefault(this.getName(), this.getDefaultName());
            this.setName(name);
//            util.getOrCreateJdbcTemplate(this);
        }
        // 多数据源
        if (MapUtil.isNotEmpty(this.getMultiDatasource())) {
            this.getMultiDatasource().forEach((k, conn) -> {
                if (StrUtil.isBlank(conn.getName())) conn.setName(k);
//                util.getOrCreateJdbcTemplate(conn);
            });
        }
    }
}
